﻿using System;
using System.ComponentModel;
using System.Configuration;
using System.Drawing;
using System.Web.UI;
using APILocawebGatewayUI.Nucleo;
using System.Web.Configuration;


namespace APILocawebGatewayUI.AMEX
{
    public sealed class Amex : Cartao
    {
        private Formulario form;

        #region Propriedades
        public override string ImgCartao
        {
            get
            {
                return "APILocawebGatewayUI.Recursos.ico_amex.gif";
            }
        }

        public override string Modulo
        {
            get
            {
                return "AMEX";
            }
        }

        [Category("Parâmetros obrigatórios")]
        [Description("Define o tipo de ambiente (teste ou producao).")]
        [DefaultValue("Teste")]
        [Browsable(false)]
        public override string Ambiente
        {
            get
            {
                object o = ViewState["AmexAmbiente"];
                return o == null ? APILocawebConfiguration.Instancia.Amex.Ambiente : o.ToString();
            }
            set { ViewState["AmexAmbiente"] = value; }
        }

        [Category("Parâmetros obrigatórios")]
        [Description("Campo Livre, até 36 caracteres")]
        [DefaultValue("")]
        [Browsable(true)]
        public override string CampoLivre
        {
            get
            {
                object o = ViewState["DescricaoDaVenda"];
                return o == null ? "" : o.ToString().Remove(36);
            }
            set { ViewState["DescricaoDaVenda"] = value; }
        }
        #endregion

        public override void RenderBeginTag(HtmlTextWriter writer)
        {
            form = new Formulario();
            base.RenderBeginTag(writer);
            form.AddControl(new InputInvisivel("identificacao", Identificacao));
            form.AddControl(new InputInvisivel("ambiente", Ambiente));
            form.AddControl(new InputInvisivel("modulo", Modulo));
            form.AddControl(new InputInvisivel("operacao", Operacao));
            form.AddControl(new InputInvisivel("parcelas", Parcelas));
            form.AddControl(new InputInvisivel("MerchTxnRef", NumeroDoPedido));
            form.AddControl(new InputInvisivel("valor", Valor));
            form.AddControl(new InputInvisivel("Locale", IdiomaDoSite == IdiomaDoSite.Portugues ? "pt_BR" : "en"));
            form.AddControl(new InputInvisivel("PaymentPlan", TipoDeParcelamento == TiposParcelamento.JurosDoLojista ? "PlanN" : "PlanAmex"));
            writer.Write(form.Campos());
        }

        /// <summary>
        /// Este método é utilizado quando os controles são criados em execução.
        /// </summary>
        /// <param name="pagina">Página que está instanciando e criando o controle</param>
        /// <param name="valor">Valor formatado de acordo com o padrão amex. Pode ser obtido usando: AmexUtilidades.FormatarPreco()</param>
        /// <param name="numeroDoPedido">Número de controle interno</param>
        public Amex(Page pagina, String valor, String numeroDoPedido)
            : base(pagina, valor, numeroDoPedido)
        {


        }
        public Amex()
        {

        }

    }

}